// src/utils/authStorage.js

/**
 * 从本地存储中获取用户认证信息
 * @returns {Object} 包含token和userInfo的对象
 */
export function getAuthInfo() {
    // 尝试从localStorage获取
    let storage = localStorage;
    let token = storage.getItem('token');
    let userInfoStr = storage.getItem('userInfo');
    // 如果localStorage中没有，尝试从sessionStorage获取
    if (!token || !userInfoStr) {
        storage = sessionStorage;
        token = storage.getItem('token');
        userInfoStr = storage.getItem('userInfo');
    }
    // 解析用户信息
    let userInfo = null;
    if (userInfoStr) {
        try {
            userInfo = JSON.parse(userInfoStr);
        } catch (e) {
            console.error('解析用户信息失败', e);
            // 解析失败时清空错误数据
            removeAuthInfo();
        }
    }
    // console.log('返回的用户信息：', { token, userInfo });
    return { token, userInfo };
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否登录
 */
export function isLoggedIn() {
    const { token, userInfo } = getAuthInfo();
    return !!token && !!userInfo;
}

/**
 * 检查用户是否为管理员
 * @returns {boolean} 是否为管理员
 */
export function isAdmin() {
    const { userInfo } = getAuthInfo();
    // 假设管理员角色标识为 '3'（需与后端定义一致）
    console.log('用户角色值：', userInfo?.role);
    console.log('用户角色类型：', typeof userInfo?.role); // 应输出 "number"
    return !!userInfo && typeof userInfo.role === 'number' && userInfo.role === 3;
}

/**
 * 获取当前用户的角色
 * @returns {string} 角色名称（如 'admin' 或 'user'）
 */
export function getUserRole() {
    const { userInfo } = getAuthInfo();
    return userInfo?.role || 1; // 默认普通用户
}

/**
 * 获取当前用户ID
 * @returns {string|number|null} 用户ID
 */
export function getUserId() {
    const { userInfo } = getAuthInfo();
    return userInfo?.userId || null;
}

/**
 * 获取当前用户名
 * @returns {string|null} 用户名
 */
export function getUsername() {
    const { userInfo } = getAuthInfo();
    return userInfo?.username || null;
}

/**
 * 获取存储的Token
 * @returns {string|null} Token字符串
 */
export function getToken() {
    const { token } = getAuthInfo();
    return token || null;
}
/**
 * 保存用户认证信息（包含刷新令牌）
 * @param {string} token - 访问令牌
 * @param {string} refreshToken - 刷新令牌
 * @param {Object} userInfo - 用户信息对象
 * @param {boolean} remember - 是否记住登录状态
 */
export function setAuthInfo(token, userInfo, remember = false) {
    const storage = remember ? localStorage : sessionStorage;
    storage.setItem('token', token);
    storage.setItem('userInfo', JSON.stringify({
        userId: userInfo.userId,
        username: userInfo.username,
        role: parseInt(userInfo.role) || 1
    }));
}


/**
 * 清除所有认证信息（含刷新令牌）
 */
export function removeAuthInfo() {
    localStorage.removeItem('token');
    localStorage.removeItem('userInfo');
    sessionStorage.removeItem('token');
    sessionStorage.removeItem('userInfo');
}